import jwt = require('jsonwebtoken');
import { v4 as uuidv4 } from 'uuid';

// 鉴权代码
module.exports = app => {
  app.passport.verify(async (ctx, user) => {
    // user为第三方登录平台返回给我们的用户信息

    // 从数据库中查找用户信息
    try {
      const existsUser = await ctx.service.oauth.getUser(user);
      // 第一个参数是要生成的对象,第二个参数是密钥 这里用config.keys就可以了
      const token = jwt.sign(existsUser, app.config.keys, { expiresIn: '7 days' });
      ctx.cookies.set('token', token, {
        path: '/',
        maxAge: 24 * 60 * 60 * 1000,
        // 🔔注意点: 这里不能设置为 true 不然前端无法获取到cookies
        httpOnly: false,
        signed: false, // 不需要签名
      });
      if (existsUser) {
        return existsUser;
      }
    } catch (e) {
      // 用户不存在,先注册在登录
      // 1.创建一个用户
      // ctx.body = uuidv4();
      const userInfo = {
        username: uuidv4(),
        password: 'com.123456',
        github: 1,
      };
      const newUser = await ctx.service.user.createUser(userInfo);
      // 2.保存这个用户的授权信息
      const oauthInfo = {
        access_token: user.accessToken,
        provider: user.provider,
        uid: user.id,
        user_id: newUser ? newUser.id : -1,
      };
      console.log(oauthInfo);
      await ctx.service.oauth.createOauth(oauthInfo);
      const token = jwt.sign(newUser, app.config.keys, { expiresIn: '7 days' });
      ctx.cookies.set('token', token, {
        path: '/',
        maxAge: 24 * 60 * 60 * 1000,
        // 🔔注意点: 这里不能设置为 true 不然前端无法获取到cookies
        httpOnly: false,
        signed: false, // 不需要签名
      });
      if (newUser) {
        return newUser;
      }
    }
  });
};
